﻿using System;

namespace Levfier.Proccessors.Filters
{
    /// <summary>
    /// ローパスFIR
    /// </summary>
    [Serializable]
    public class LowPassFIR : FIR
    {
        /// <summary>
        /// フィルタを初期化する
        /// </summary>
        /// <param name="sender">イベント発生元</param>
        protected override void InitFilter(object sender)
        {
            //フィルタ用のバッファを作成
            int filterLength = (int)this.filterLengthParam.Value;
            this.inputRingBuffer = new double[filterLength];
            this.coefficientValues = new double[filterLength];
            this.inputRingBufferIndex = 0;

            //正規化後のカットオフ周波数
            double cutoffFreq = this.cutOffFreqParam.Value / VSTParameterManager.GetInstance().SampleRate;

            //フィルタ設計
            for (int i = 0; i < filterLength; i++)
            {
                //窓関数 * フィルタ係数
                this.coefficientValues[i] = CommonMath.GetHammingWindowValue(i, filterLength)
                    * 2 * cutoffFreq * CommonMath.Sinc(2 * Math.PI * cutoffFreq * (i - filterLength / 2));
            }
        }
    }
}
